Interceptors via catchError() remap exception types — they convert domain or ORM errors into HttpException subclasses before the filter sees them. Exception filters shape the HTTP error response sent to the client. Interceptors fix what the exception is; filters fix how the error response looks. Interceptors run before filters in the pipeline.
Interceptors (catchError) — translate exception types: EntityNotFoundError to NotFoundException.
Exception filters — format the HTTP response: shape the JSON body, set headers, log errors.
Interceptors run before filters in the pipeline — remap exception type first, then format the response.
Use interceptors when the error type needs changing; use filters when only the response format needs changing.
Always re-throw from interceptor catchError if the error is not handled — let the filter catch it.